참조 : https://dimillian.medium.com/how-to-use-cursor-for-ios-development-54b912c23941
VSCode(or Cursor같은 VSCode기반 IDE) 기본 설정
각 패키지가 무슨 역할을 하는지는 위 포스팅에서 참조할 수 있다.
간단하게 순서만 요약하여 빠른 세팅을 도우려고 한다.
-
brew install xcode-build-server
-
brew install xcbeautify
-
brew install swiftformat
-
VSCode에서 Extension을 설치한다. - Swift, Sweetpad
-
VSCode에서 Xcode로 만든 프로젝트 폴더를 연다. (.xcodeproj 파일이 포함된 최상위 폴더를 열어야 한다.)
-
바로 이어서 LNB에 있는 Sweetpad로 들어간다. 내 프로젝트 이름이 리스트에 바로 뜨면 성공이다.
만약에 Select Workspace가 떠있으면 Run diagnose를 클릭해서 문제를 확인할 수 있다.
-
CMD+SHIFT+P -> Sweetpad: Generate Build Server Config 명령어를 실행하면 buildServer.json 파일을 만들어준다.
-
프로젝트를 실행하면 아래와 같이 화면이 잘 뜬다.
Hot Reload
XCode에서 SwiftUI를 확인할 때처럼 실시간 수정사항도 확인 가능하다.
- Inject라이브러리를 깃헙 레포에 들어가서 설치한다.
- Xcode에서 File > Add Package .. 에 들어가서 Add local을 눌러서 설치한 Inject 패키지를 추가한다.
- InjectionIII에 들어가서 앱을 설치하고 응용프로그램(Application)으로 위치를 옮긴다.
- InjectionIII 앱을 키고, Open Project를 눌러서 우리가 구동중인 프로젝트를 선택한다.
- InjectionIII 앱에서 Prepare Project를 눌러준다.
- Xcode에서 Build Settings를 아래사진처럼 Other Linker Flags에 Flag들을 추가해준다.
- Xcode에서 다시 빌드하면 성공!
최종 코드
코드는 다음과 같이 필수로 2가지가 추가되어 있어야 한다.
- @ObserveInjection var forceRedraw
- .enableInjection()
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world10")
SecondView()
}
.padding()
}
}
struct SecondView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world21")
}
.padding()
}
}
#Preview {
@ObserveInjection var forceRedraw
ContentView()
.enableInjection()
}
주의사항
변수가 반영되지 않는 현상
실험을 하다보니까, 단점이 발견됐다. TodoList를 만들어서 확인해보는데 상태의 변경을 따라가지 못하는 문제가 있었다.
XCode의 Preview에서는 바로바로 바뀌는데, 별도로 결과물을 띄워서 보는 방식에서는 변수가 아닌것들은 잘 바뀌는데 변수가 잘 안뷔었다.
아래 사진처럼 99같은 변수는 값이 안바뀌고 제목같은 거는 바로바로 바뀌었다.
불필요한 코드가 추가되는 현상
Injection 앱의 prepare을 해보면 .enableInjection()
코드와 @ObserveInjection var forceRedraw
를 삽입한다. 이로서 비즈니스 로직을 파악하는데 불필요한 코드들이 각 화면들마다 추가되거나 해서 복잡하게 느껴진다.
SwiftLint
brew install swiftlint 후에 Root > .vscode
폴더를 만들고 아래 입력 시 저장만 하면 코드 정렬 자동으로 되고, XCode에서 뜨는 에러도 동일하게 알려준다.
{
"sweetpad.build.xcodeWorkspacePath": "PDF.xcodeproj/project.xcworkspace",
"sweetpad.tuist.autogenerate": true,
"[swift]": {
"editor.defaultFormatter": "sweetpad.sweetpad",
"editor.formatOnSave": true
}
}
결과 : 결과적으로 나는 어떻게 작업하고 있는가?
코드 에디팅은 VSCode나 Cursor에서 하고 미리보기만 XCode에서 확인하는 수준 정도는 좋은 것 같다. VSCode에서 별도의 핸드폰 창 띄우고 실시간 연동하는 것도 성공해봤는데 몇 가지 단점 발견으로 인해서 그냥 코드 수정 정도만 하는 정도로 하면 딱 적당히 좋은 것 같다.